<?php

namespace fastphp;

use fastphp\util\File;

class Request
{

    public function isGet(): bool
    {
        return $_SERVER['REQUEST_METHOD'] == 'GET';
    }

    public function isPost(): bool
    {
        return $_SERVER['REQUEST_METHOD'] == 'POST';
    }

    public function isDelete(): bool
    {
        return $_SERVER['REQUEST_METHOD'] == 'DELETE';
    }

    public function isPUT(): bool
    {
        return $_SERVER['REQUEST_METHOD'] == 'PUT';
    }

    public function get($name = null)
    {
        return $name ? $_GET[$name] ?? null : $_GET;
    }

    public function post($name = null)
    {
        // 获取请求的原始输入数据
        $json = file_get_contents('php://input');

        // 检查输入是否为有效的JSON字符串
        $data = json_decode($json, true); // 将JSON字符串解析为关联数组
        if (json_last_error() === JSON_ERROR_NONE) {
            // 处理解析后的数据
            return $data;
        }
        return $name ? $_POST[$name] ?? null : $_POST;
    }

    public function put($name = null)
    {
        // 获取请求的原始输入数据
        $json = file_get_contents('php://input');

        // 检查输入是否为有效的JSON字符串
        $data = json_decode($json, true); // 将JSON字符串解析为关联数组
        if (json_last_error() === JSON_ERROR_NONE) {
            // 处理解析后的数据
            return $data;
        }
        return null;
    }

    public function delete($name = null)
    {
        // 获取请求的原始输入数据
        $json = file_get_contents('php://input');

        // 检查输入是否为有效的JSON字符串
        $data = json_decode($json, true); // 将JSON字符串解析为关联数组
        if (json_last_error() === JSON_ERROR_NONE) {
            // 处理解析后的数据
            return $data;
        }
        return null;
    }

    public function file($name = null)
    {
        return new File($_FILES[$name]);
    }

    public function param($name = null)
    {
        // 检查请求方法，虽然这里主要是处理POST和PUT，但你可以根据需要添加其他方法
        if ($this->isPost() || $this->isPUT() || $this->isDelete()) {
            // 获取请求的原始输入数据
            $json = file_get_contents('php://input');

            // 检查输入是否为有效的JSON字符串
            $data = json_decode($json, true); // 将JSON字符串解析为关联数组
            if (json_last_error() === JSON_ERROR_NONE) {
                // 处理解析后的数据
                return $data;
            }
        }
        return $name ? $_REQUEST[$name] ?? null : $_REQUEST;
    }
}